package infra

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var config map[string]string = make(map[string]string)

func Get(key string) string {
	return config[key]
}

func GetB(key string) bool {
	return config[key] == "true"
}
func GetI(key string, def int) int {
	if v, ok := config[key]; ok {
		if i, err := strconv.Atoi(v); err == nil {
			return i
		}
	}
	return def
}
func GetF(key string, def float32) float32 {
	if v, ok := config[key]; ok {
		if f, err := strconv.ParseFloat(v, 32); err == nil {
			return float32(f)
		}
	}
	return def
}
func GetS(key string, def string) string {
	if v, ok := config[key]; ok {
		return v
	}
	return def
}

// LoadAll 读取配置文件并解析 key:=value 格式的配置项
// 参数: 无
// 返回值:
//   - map[string]string: 解析后的配置项键值对
//   - error: 操作过程中的错误
func LoadAll() error {

	// 打开配置文件
	file, err := os.Open("../.aienv/aenv")
	if err != nil {
		return fmt.Errorf("failed to open config file: %v", err)
	}
	defer file.Close()

	// 逐行读取文件内容
	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text()
		line = strings.TrimSpace(line)

		// 跳过空行和注释行
		if line == "" || strings.HasPrefix(line, "#") {
			continue
		}

		// 解析 key:=value 格式
		parts := strings.SplitN(line, ":=", 2)
		if len(parts) != 2 {
			continue // 不是有效的 key:=value 格式，跳过此行
		}

		key := strings.TrimSpace(parts[0])
		value := strings.TrimSpace(parts[1])

		// 存储到 map 中
		config[key] = value
	}

	// 检查扫描过程中是否有错误
	if err := scanner.Err(); err != nil {
		return fmt.Errorf("error reading config file: %v", err)
	}

	return nil
}
